/*
 * @FileName: app_analog.h
 * @Author: GreyQiu qiushaogui@aikosolar.com
 * @Date: 2023-07-18 11:50:59
 * @LastEditors: GreyQiu qiushaogui@aikosolar.com
 * @LastEditTime: 2023-09-25 10:42:42
 * @Description: 
 * 
 * Copyright (c) 2023, All Rights Reserved. 
 */

#ifndef __APP_ANALOG_H__
#define __APP_ANALOG_H__

#include <stdint.h>
#include "analog.h"
#include "power_meter.h"

#define ADC_RADIO (3.36f / 4095)

/**
 * @description: 各个信号的采样系数，ADC的1个码值刻度代表的信号幅度
 */
#define COFF_K_VAC     (3.3f / 4095.0f / 0.0033f)
#define COFF_B_VAC     (-500.0f)

/**
 * @description: 模拟信号ID
 */
typedef enum {
    ANALOG_ID_VAC = 0,
    ANALOG_ID_NUM
} anlog_id_t;

extern analog_t analog_tbl[ANALOG_ID_NUM];

extern PowerMeter Vrms;

/**
 * @description: 模拟信号值获取（未滤波）
 * @param id    模拟信号ID
 * @return 模拟信号值
 */
static inline float analog_real_val(uint16_t id)
{
    return analog_tbl[id].real;
}

/**
 * @description: 模拟信号值获取（已滤波）
 * @param id    模拟信号ID
 * @return 已滤波后的模拟信号值
 */
static inline float analog_real_filter(uint16_t id)
{
    return analog_tbl[id].real_flt;
}

void app_analog_init(void);
void app_analog_temp_cal(void);
int app_analog_get_temp(void);
float app_analog_get_wh(void);
void app_analog_power(void);
void app_analog_task(void);

#endif // __APP_ANALOG_H__
